Засоби апаратної підтримки управління пам`яттю в мікропроцесорах Intel 80386 80486 і Pentium

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Засоби апаратної підтримки управління пам'яттю і багатозадачного середовища в мікропроцесорах Intel 80386, 80486 і Pentium

Процесори Intel 80386, 80486 і Pentium з точки зору описані в даному розділі питань мають аналогічні засоби, тому для стислості в тексті використовується термін "процесор i386", хоча вся інформація цього розділу в рівній мірі відноситься до трьох моделей процесорів фірми Intel.

Процесор i386 має два режими роботи - реальний (real mode) і захищений (protected mode). У реальному режимі процесор i386 працює як швидкий процесор 8086 з дещо розширеним набором команд. У захищеному режимі процесор i386 може використовувати всі механізми 32-х розрядної організації пам'яті, в тому числі механізми підтримки віртуальної пам'яті і механізми перемикання завдань. Крім цього, в захищеному режимі для кожного завдання процесор i386 може емулювати 86 і 286 процесори, які в цьому випадку називаються віртуальними процесорами. Таким чином, при багатозадачному роботі в захищеному режимі процесор i386 працює як кілька віртуальних процесорів, що мають загальну пам'ять. На відміну від реального режиму, режим віртуального процесора i86, який називається в цьому випадку режимом V86, підтримує сторінкову організацію пам'яті та засоби багатозадачності. Тому завдання, що виконуються в режимі V86, використовують ті ж засоби межзадачного захисту і захисту ОС від користувача завдань, що і завдання, що працюють в захищеному режимі i386. Однак максимальний розмір віртуального адресного простору становить 1 Мб, як і у процесора i86.

Переключення процесора i386 з реального режиму в захищений і назад здійснюється виключно шляхом виконання команди MOV, яка змінює біт режиму в одному з керуючих регістрів процесора. Перехід процесора в режим V86 відбувається схожим чином шляхом зміни значення певного біта в іншому регістрі процесора.

Засоби підтримки сегментації пам'яті

Фізичне адресний простір процесора i386 складає 4 Гб, що визначається 32-розрядною шиною адреси. Фізична пам'ять є лінійною з адресами від 00000000 до FFFFFFFF в шістнадцятковому представленні. Віртуальний адреса, що використовується в програмі, являє собою пару - номер сегмента і зміщення всередині сегменту. Зсув зберігається у відповідному полі команди, а номер сегмента - в одному з шести сегментних регістрів процесора (CS, SS, DS, ES, FS або GS), кожен з яких є 16-бітним. Засоби сегментації утворюють верхній рівень засобів управління віртуальною пам'яттю процесора i386, а кошти сторінкової організації - нижній рівень. Засоби сторінкової організації можуть бути як включені, так і вимкнені (за рахунок установки певного біта в регістрі процесора), і залежно від цього змінюється зміст перетворення віртуальної адреси, яке виконують кошти сегментації. Спочатку розглянемо випадок роботи засобів сегментації при відключеному механізмі управління сторінками.

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.19. Підтримка сегментів

На малюнку 2.19 показано віртуальний адресний простір процесора i386 при відключеному механізмі управління сторінками. 32-бітове зсув визначає розмір віртуального сегмента в 232 = 4 Гб, а кількість сегментів визначається розміром поля, відведеного в сегментному регістрі під номер сегмента. На малюнку 2.20, а показана структура даних у сегментному регістрі. Ця структура називається селектором, оскільки призначена для вибору дескриптора певного сегмента з таблиць дескрипторів сегментів. Дескриптор сегмента описує всі характеристики сегменту, необхідні для перевірки правильності доступу до нього і його перебування у фізичному адресному просторі. Процесор i386 підтримує дві таблиці дескрипторів сегментів - глобальну (Global Descriptor Table, GDT) і локальну (Local Descriptor Table, LDT). Глобальна таблиця призначена для опису сегментів операційної системи і сегментів межзадачного взаємодії, тобто сегментів, які в принципі можуть використовуватися всіма процесами, а локальна таблиця - для сегментів окремих завдань. Таблиця GDT одна, а таблиць LDT повинно бути стільки, скільки в системі виконується завдань. При цьому активною в кожен момент часу може бути тільки одна з таблиць LDT.

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.20. Формати селектора і дескрипторів даних і коду:
а - формат селектора; б - формат регістру GDTR;
в - формат дескриптора сегмента даних або коду

З малюнка 2.20 видно, що селектор складається з трьох полів - 13-бітного поля індексу (номера сегмента) у таблицях GDT і LDT, 1-бітного поля - покажчика типу використовуваної таблиці дескрипторів і двухбітного поля поточних прав доступу завдання - CPL. Розрядність поля індексу визначає максимальне число глобальних і локальних сегментів завдання - по 8K (213) сегментів кожного типу, всього 16 K. З урахуванням максимального розміру сегмента - 4 Гбайта - кожна задача при чисто сегментної організації віртуальної пам'яті працює у віртуальному адресному просторі в 64 Тбайта.

Тепер простежимо, як віртуальний простір відображається на фізичний простір розміром в 4 Гбайта при чисто сегментному механізмі відображення. Отже, коли завданні необхідно отримати доступ до осередку фізичної пам'яті, то для вибору дескриптора віртуального сегмента використовується значення селектора з відповідного (залежно від команди і стадії її виконання - вибірка коду команди або даних) сегментного регістра процесора. Значення поля типу таблиці вказує на те, яку таблицю потрібно використовувати - GDT чи LDT. Розглянемо спочатку випадок використання таблиці GDT. Для зберігання таблиць GDT і LDT використовується оперативна пам'ять (використання швидкої асоціативної пам'яті процесора для зберігання елементів цих таблиць розглянемо пізніше). Для того, щоб процесор зміг знайти у фізичній пам'яті таблицю GDT, її повний 32-бітний фізичну адресу (адресу початку таблиці), а також розмір (поле в 16 біт) зберігаються в спеціальному регістрі процесора GDTR (рисунок 2.20, б). Кожен дескриптор в таблицях GDT і LDT має розмір 8 байт, тому максимальний розмір цих таблиць - 64 К (8 (8 К дескрипторів). Для отримання потрібного дескриптора з таблиці процесор складає базову адресу таблиці GDT з регістра GDTR зі зрушеним на 3 розряду вліво ( множення на 8, у відповідності з числом байтів в елементі таблиці GDT) значенням поля індексу з сегментного регістра і отримує фізичний лінійний адресу потрібного дескриптора у фізичній пам'яті. Таблиця GDT постійно присутній у фізичній пам'яті, тому процесор витягує за цією адресою потрібний дескриптор сегменту і поміщає його у внутрішній (програмно недоступний) регістр процесора. (Таких регістрів шість і кожен з них відповідає певному сегментному регістру, що значно прискорює роботу процесора).

Дескриптор віртуального сегмента (рисунок 2.20, в) складається з кількох полів, основними з яких є поле бази - базового 32-розрядного фізичної адреси початку сегменту, поле розміру сегменту і поле прав доступу до сегмента - DPL (Descriptor Privilege Level). Спочатку процесор визначає правильність адреси, порівнюючи зміщення і розмір сегмента (у випадку виходу за межі сегменту відбувається переривання типу виняток - exсeption). Потім процесор перевіряє права доступу завдання до даного сегмента, порівнюючи значення полів CPL селектора і DPL дескриптора сегмента. У процесорі i386 мандатний спосіб визначення прав доступу (званий також механізмом кілець захисту), при якому є кілька рівнів прав доступу, і об'єкти будь-якого рівня мають доступ до всіх об'єктів рівного рівня або більш низьких рівнів, але не має доступу до об'єктів більш високих рівнів. У процесорі i386 існує чотири рівні прав доступу - від 0-го, який є найвищим, до 3-го - найнижчого. Очевидно, що операційна система може використовувати механізм рівнів захисту на свій розсуд. Однак передбачається, що нульовий рівень буде використаний для ядра операційної системи, а третій рівень - для прикладних програм, проміжні рівні - для утиліт і підсистем операційної системи, менш привілейованих, ніж ядро.

Таким чином, доступ до віртуального сегменту вважається законним, якщо рівень прав селектора CPL вище або дорівнює рівню прав сегмента DPL (CPL (DPL). При порушенні прав доступу відбувається переривання, як і у випадку недотримання меж сегменту. Далі перевіряється наявність сегмента у фізичній пам'яті за значенням біта P дескриптора, і якщо сегмент відсутній у фізичній пам'яті, то відбувається переривання. При наявності сегмента в пам'яті обчислюється фізичний лінійний адресу шляхом складання бази сегмента і зміщення і виробляється доступ до елемента фізичної пам'яті за цією адресою.

У випадку, коли селектор вказує на таблицю LDT, віртуальний адреса перетворюється у фізичну аналогічним чином, але для доступу до самої таблиці LDT додається ще один етап, тому що в процесорі регістр LDTR вказує на розміщення таблиці LDT не прямо, а опосередковано. Сам регістр LDTR має розмір 16 біт і містить селектор дескриптора таблиці GDT, який описує розташування цієї таблиці у фізичній пам'яті. Тому при доступі до елемента фізичної пам'яті через таблицю LDT відбувається дворазове перетворення ВА у фізичний, причому обидва рази за описаною вище схемою. Спочатку за значенням селектора LDTR визначається фізичну адресу дескриптора з таблиці GDT, що описує початок розташування таблиці LDT у фізичній пам'яті, а потім за допомогою селектора завдання обчислюється зсув в таблиці LDT і визначається фізичний адресу потрібного дескриптора. Далі процес аналогічний перетворенню віртуального адреси за допомогою таблиці GDT.

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.21. Типи дескрипторів

Дескриптор сегмента містить ще кілька полів. Однобітні полі G визначає одиницю вимірювання розміру сегменту, при G = 0 розмір визначається в байтах, і тоді сегмент не може бути більше 64 К, а при G = 1 розмір визначається в 4К-байтних сторінках, при цьому максимальний розмір сегмента досягає зазначених 4 Гбайт . Поле D визначає тип адресації сегменти: при D = 0 сегмент є 16-бітним (для режиму емуляції 16-бітових процесорів i86 і i286), а при D = 1 сегмент є 32-бітним. Крім цього в дескрипторі є поле типу сегмента, яке у свою чергу ділиться на декілька полів (малюнок 2.21). Поле S визначає, чи є сегмент системним (S = 1) або для користувача (S = 0). У свою чергу призначені для користувача сегменти поділяються на сегменти даних (E = 0) і сегменти коду (E = 1). Для сегменту даних визначаються однобітні поля:

ED - напрямку поширення сегмента (ED = 0 для звичайного сегменту даних, що поширюється в бік збільшення адрес, ED = 1 для стекового сегменту даних, що поширюється в бік зменшення адрес),

W - поле дозволу запису в сегмент (при W = 1 запис дозволена, при W = 0 - заборонена),

A - поле доступу до сегмента (1 означає, що після очищення цього поля до сегмента було звернення з читання або запису, це поле може використовуватися операційною системою у її стратегії заміни сторінок в оперативній пам'яті).

Для сегменту коду використовуються однобітні ознаки:

A - має сенс, аналогічний полю A сегменту даних,

R - дозволяє або забороняє читання з кодового сегмента,

C - біт підпорядкування, дозволяє або забороняє виклик даного кодового сегмента з іншого кодового сегмента з більш низькими правами доступу.

У процесорі i386 існує велика кількість системних сегментів, до яких зокрема належать системні сегменти типу LDT, шлюзи виклику підпрограм і завдань і сегменти стану завдання TSS.

Таким чином, для використання чисто сегментного механізму процесора i386 операційній системі необхідно сформувати таблиці GDT і LDT, завантажити їх в пам'ять (для початку достатньо завантажити тільки таблицю GDT), завантажити покажчики на ці таблиці в регістри GDTR і LDTR і вимкнути сторінкову підтримку. Якщо ж операційна система не хоче використовувати сегментну організацію віртуальної пам'яті, то їй достатньо створити таблицю дескрипторів з одного входу (дескриптора) і завантажити базові значення сегмента в дескриптор. Віртуальний адресний простір завдання буде складатися з одного сегмента довжиною максимум у 4 Гб.

Сегментно-сторінковий механізм

При включеній системі управління сторінками працює як описаний вище сегментний механізм, так і механізм управління сторінками, однак при цьому сенс роботи сегментного механізму змінюється. У цьому випадку віртуальний адресний простір завдання має розмір в 4 Гбайта, в якому розміщуються всі сегменти (рисунок 2.22). Як і раніше селектор завдання визначає номер віртуального сегмента, а зсув у команді завдання - зміщення всередині цього сегменту. Так як тепер всі сегменти поділяють один адресний простір, то можливо їх накладення, але процесор не контролює такі ситуації, залишаючи цю проблему операційній системі. Перший етап перетворення віртуальної адреси, пов'язаний з перетворенням зсуву і селектора з використанням таблиць GDT і LDT, що містять дескриптори сегментів, в точності збігається з етапом перетворення цих даних при відключеному механізмі управління сторінками. Всі структури даних цих таблиць такі ж. Однак, якщо раніше дескриптор сегменту містив його базовий адреса в фізичному адресному просторі, і при складанні його зі зміщенням з команди програми виходив лінійний шуканий адресу у фізичній пам'яті, то тепер дескриптор містить базову адресу сегмента у віртуальному адресному просторі. Тому в результаті його складання зі зміщенням виходить лінійний віртуальний адресу, який на другому етапі (сторінковому) перетворюється на номер фізичної сторінки. Для реалізації механізму управління сторінками як фізична, так і віртуальний адресний простору розбиті на сторінки розміром 4 К. Загалом у цих адресних просторах налічується 1 М сторінок. Незважаючи на наявність декількох віртуальних сегментів, весь віртуальний адресний простір завдання має загальне розбиття на сторінки, так що нумерація віртуальних сторінок наскрізна.

Лінійний віртуальний адреса містить у своїх старших 20 розрядах номер віртуальної сторінки, а в молодших 12 розрядах зміщення всередині сторінки. Для відображення віртуальної сторінки у фізичну досить побудувати таблицю сторінок, кожен елемент якої - дескриптор віртуальної сторінки - містив би номер відповідної їй фізичною сторінки та її атрибути. У процесорі i386 так і зроблено, і структура дескриптора сторінки показана на малюнку 2.23. 20-ти розрядів номера сторінки достатньо для визначення фізичної адреси початку сторінки, тому що при її фіксованому розмірі 4 До молодші 12 розрядів цієї адреси завжди дорівнюють нулю. Дескриптор сторінки також містить наступні поля, близькі за змістом з відповідними полями дескриптора сегмента:

P - біт присутності сторінки у фізичній пам'яті,

W - біт дозволу запису в сторінку,

U - біт користувач / супервізор

A - ознака того, чи був доступ до сторінки,

D - ознака модифікації вмісту сторінки,

PWT і PCD - управляють механізмом кешування сторінок (введені, починаючи з процесора i486),

AVL - резерв для потреб операційної системи (available for use).

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.22. Сегментно-сторінковий механізм

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.23. Формат дескриптора сторінки

При невеликому розмірі сторінки процесора i386 щодо розмірів адресних просторів, таблиця сторінок повинна займати в пам'яті дуже значне місце - 4 байти (1М = 4 Мбайта. Це занадто багато для нинішніх моделей персональних комп'ютерів, тому в процесорі i386 використовується розподіл всієї таблиці сторінок на розділи за 1024 дескриптора. Розмір розділу обраний так, щоб один розділ займав одну фізичну сторінку (1024 (4 байти = 4 Кбайта). Всього виходить 1024 розділу (1024 (1024 = 1М). Для того, щоб не зберігати всі розділи таблиці сторінок одночасно у фізичній пам'яті, використовується каталог розділів таблиці сторінок, який використовує такі ж за структурою дескриптори сторінок, що і в таблиці сторінок. Тому для зберігання інформації про дескрипторах 1024 розділів необхідна пам'ять 4 К, тобто одна фізична сторінка. Сукупність дескрипторів, що описують стан і характеристики віртуальних сторінок розділів таблиці сторінок, називається каталогом розділів або таблиць. Віртуальна сторінка, що зберігає вміст каталогу, завжди знаходиться у фізичній пам'яті, і номер її фізичної сторінки зазначений у спеціальному регістрі CR3 процесора (точніше, в одному з полів цього регістра).

Перетворення лінійного ВА у фізичний відбувається наступним чином (рисунок 2.24). Поле номера віртуальної сторінки (старші 20 розрядів) ділиться на дві рівні частини по 10 розрядів - поле номера розділу і поле номера сторінки в розділі. За допомогою номера фізичної сторінки, що зберігає каталог та зміщення в цій сторінці, задається полем номера розділу, процесор знаходить дескриптор віртуальної сторінки розділу. Відповідно до атрибутами цього дескриптора визначаються права доступу до цієї сторінки, а також наявність її у фізичній пам'яті. У разі її відсутності відбувається сторінкове переривання, і операційна система повинна в цьому випадку перемістити її в пам'ять. Після того, як потрібна сторінка знаходиться в пам'яті, для визначення адреси елемента даних використовується зміщення, що визначається полем номера сторінки лінійного віртуального адреси.

Таким чином, при доступі до сторінки в процесорі використовується дворівнева схема адресації сторінок, що уповільнює перетворення, але дозволяє використовувати сторінковий механізм і для зберігання самої таблиці сторінок, і суттєво зменшити обсяг фізичної пам'яті для її зберігання. Для прискорення сторінкових перетворень в блоці управління сторінками використовується асоціативна пам'ять, в якій кешується 32 комбінації "номер віртуальної сторінки - номер фізичної сторінки". Ця спеціальна кеш-пам'ять (додаткова по відношенню до 8 Кбайтних кешу даних процесорів i486 і Pentium) значно прискорює перетворення адрес, так як у разі попадання в кеш тривалий процес, описаний вище, виключається.

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.24. Перетворення лінійного ВА у фізичну адресу

Організація віртуальної пам'яті в процесорі i386 дозволяє захистити адресні простори різних процесів за рахунок двох механізмів:

Ізоляція адресних просторів процесів у фізичній пам'яті шляхом призначення їм різних фізичних сторінок або сегментів (якщо сторінковий механізм відключений). Захист сегментів від несанкціонованого доступу за допомогою привілеїв чотирьох рівнів. Засоби виклику підпрограм і задач

Операційна система, як однозадачние, так і багатозадачна, повинна надавати завданням кошти виклику підпрограм операційної системи, бібліотечних підпрограм, а також мати кошти для запуску завдань, а при багатозадачному роботі засоби швидкого переходу з задачі на задачу. Виклик підпрограми відрізняється від запуску завдання тим, що в першому випадку адресний простір залишається тим же (таблиця LDT залишається колишньою), а при виклику завдання адресний простір повністю змінюється.

Виклик підпрограм без зміни кодового сегмента в захищеному режимі процесора i386 проводиться аналогічно виклику в реальному режимі за допомогою команд JMP і CALL.

Для виклику підпрограми, код якої знаходиться в іншому сегменті (який може належати бібліотеці, іншої задачі або операційній системі), процесор i386 надає 2 варіанти виклику, причому обидва використовують захист за допомогою прав доступу.

Перший спосіб полягає у безпосередньому вказівці в полі команди JMP або CALL селектора сегмента, що містить код викликається підпрограми, а також зміщення у цьому сегменті адреси початку підпрограми.

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.25. Безпосередній виклик підпрограми

Схема такого виклику наведена на малюнку 2.25. Тут і далі показаний тільки етап отримання лінійного адреси у віртуальному просторі, а наступний етап (мається на увазі, що механізм підтримки сторінок включений) перетворення цієї адреси в номер фізичної сторінки пропущено, тому що він не містить нічого специфічного порівняно з доступом до сегменту даних, розглянутому вище. Дозвіл виклику відбувається в залежності від значення поля C в дескриптор сегменту викликається коду. При C = 0 викликається сегмент не вважається підлеглим, і виклик дозволяється, тільки якщо рівень прав викликає коду не менше рівня прав викликається сегмента. При C = 1 викликається сегмент вважається підлеглим і допускає виклик з коду з будь-яким рівнем прав доступу, але при виконанні підпрограма наділяється рівнем прав викликав коду.

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.26. Формат дескриптора шлюзу виклику підпрограми

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.27. Виклик підпрограми через шлюз виклику

Очевидно, що перший спосіб не годиться для виконання функцій операційної системи, що має звичайно нульовий рівень прав, з призначеної для користувача програми, яка працює, як правило, на третьому рівні. Тому процесор i386 надає інший спосіб виклику підпрограм, заснований на тому, що заздалегідь визначається набір точок входу у привілейовані кодові сегменти, і ці точки входу описуються за допомогою спеціальних дескрипторів - дескрипторів шлюзів виклику підпрограм. Цей дескриптор належить до системних дескрипторам, і його структура відрізняється від структури дескрипторів сегментів коду і даних (малюнок 2.26). Схема його використання наведена на малюнку 2.27. Селектор з поля команди CALL використовується для вказівки на дескриптор шлюзу виклику підпрограми в таблицях GDT чи LDT. Для використання цього дескриптора викликає код повинен мати не менший рівень прав, ніж дескриптор, але якщо дескриптор шлюзу доступний, то він може вказувати на дескриптор сегменту викликається коду, що має більш високий рівень, ніж має шлюз, і виклик при цьому відбудеться. При визначенні адреси входу в викликається сегменті зміщення з поля команди CALL не використовується, а використовується зміщення з дескриптора шлюзу, що не дає можливості завданню самій визначати точку входу в захищений кодовий сегмент.

При виклику кодів, що володіють різними рівнями привілеїв, виникає проблема передачі параметрів між різними стеками, так як для надійного захисту завдання різного рівня привілеїв мають різні сегменти стеків. Селектори цих сегментів зберігаються в контексті завдання - сегменті TSS (Task State Segment). Якщо викликається підпрограма, яка має інший рівень привілеїв, то з поточного стека в стек рівня доступу викликається сегмента копіюється стільки 32-розрядних слів, скільки вказано у полі лічильника слів дескриптора шлюзу.

Структура сегменту TSS завдання приведено на малюнку 2.28. Контекст завдання повинен містити всі дані для того, щоб можна було відновити виконання перерваної в довільний момент часу завдання, тобто значення регістрів процесора, покажчики на відкриті файли і деякі інші, залежні від операційної системи, змінні. Швидкість перемикання контексту в значній мірі впливає на швидкісні якості багатозадачного операційної системи. Процесор i386 виробляє апаратне перемикання контексту завдання, що зберігається в сегменті TSS. Як видно з малюнка, сегмент TSS має фіксовані поля, відведені для значень регістрів процесора, як універсальних, так і деяких керуючих (наприклад LDTR і CR3). Для опису можливостей доступу завдання до портів введення-виведення процесор використовує в захищеному режимі полі IOPL (Input / Output Privilege Level) у своєму регістрі EFLAGS і карту бітових полів доступу до портів. Для отримання можливості виконувати команди введення-виведення виконуваний код повинен мати рівень прав не нижче значення поля IOPL. Якщо ж ця умова дотримується, то можливість доступу до порту з конкретною адресою визначається значенням відповідного біта в карті введення-виведення сегменту TSS (карта складається з 64 Кбіт для опису доступу до 65536 портів).


Бітова карта вводу / виводу (БКВВ)
(
(8 Кбайт
Додаткова інформація ОС
Відносний адресу БККВ 0 . . . 0 T 64
0 . . . 0 Селектор LDT 60
0 . . . 0 GS 5C
0 . . . 0 FS 58
0 . . . 0 DS 54
0 . . . 0 SS 50
0 . . . 0 CS 4C
0 . . . 0 ES 48
EDI 44
ESI 40
EBP 3C
ESP 38
EBX 34
EDX 30
ECX 2C
EAX 28
EFLAGS 24
EIP 20
CR3 1C
0 . . . 0 SS рівня 2 18
ESP2 14
0 . . . 0 SS рівня 1 10
ESP1 C
0 . . . 0 SS рівня 0 8
ESP0 4
0 . . . 0 Селектор TSS повернення 0

Рис. 2.28. Структура сегменту TSS

Крім цього, сегмент TSS може включати додаткову інформацію, необхідну для роботи завдання і яка від конкретної операційної системи (наприклад, покажчики відкритих файлів або покажчики на іменовані конвеєри мережевого обміну). Включена в цей сегмент інформація автоматично замінюється процесором при виконанні команди CALL, селектор якої вказує на дескриптор сегменту TSS в таблиці GDT (дескриптори цього типу можуть бути розташовані тільки в цій таблиці). Формат дескриптора сегмента TSS аналогічний формату дескриптора сегменту даних.

Засоби апаратної підтримки управління пам'яттю в мікропроцесорах Intel 80386, 80486 і Pentium

Рис. 2.29. Безпосередній виклик завдання

Як і у випадку виклику підпрограм, є дві можливості виклику завдання - безпосередній виклик через вказівку селектора сегмента TSS потрібної завдання в полі команди CALL і непрямий виклик через шлюз виклику завдання. Як і при виклику підпрограм, безпосередній виклик можливий тільки у випадку, якщо викликає код володіє рівнем привілеїв, не меншим, ніж викликається завдання. При виклику через шлюз (який може розташовуватися і в таблиці LDT) достатньо лише мати права доступу до шлюзу. Безпосередній виклик завдання показаний на малюнку 2.29. При перемиканні задач процесор виконує наступні дії:

1) Виконується команда CALL, селектор якої вказує на дескриптор сегменту типу TSS.

2) У TSS поточного завдання зберігаються значення регістрів процесора. На поточний сегмент TSS вказує регістр процесора TR, що містить селектор сегмента.

3) У TR завантажується селектор сегменту TSS завдання, на яку перемикається процесор.

4) З нового TSS в регістр LDTR переноситься значення селектора таблиці LDT в таблиці GDT завдання.

5) Відновлюються значення регістрів процесора (з відповідних полів нового сегменту TSS).

6) У полі селектора повернення заноситься селектор сегменту TSS знімається з виконання завдання для організації повернення до перерваної задачі в майбутньому.

Виклик завдання через шлюз відбувається аналогічно, додається лише етап пошуку дескриптора сегмента TSS за значенням селектора дескриптора шлюзу виклику.

Використання всіх можливостей, що надаються процесорами Intel 80386, 80486 і Pentium, дозволяє організувати операційній системі високонадійну многозадачную середу.


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
52.8кб. | скачати


Схожі роботи:
Історія обчислювальної техніки до процесора Intel 80486
Управління пам`яттю
Управління оперативною пам`яттю
Intel Pentium 4
Intel Pentium III
Управління пам яттю в МS-DOS Описані основні ф-ції управління памяттю в ОС Ms-Dos
Intel Pentium 4 306 ГГц з підтримкою технології Hyper-Threading
Синтез автоматів з пам яттю
Коди без пам`яті Коди Хаффмена Коди з пам`яттю
© Усі права захищені
написати до нас